home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 August / macformat-027.iso / mac / Shareware City / Developers / Oberon⁄F / Mac / Mod / FileMgr (.txt) < prev    next >
Encoding:
Oberon Document  |  1994-06-07  |  20.3 KB  |  563 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Geneva
  16. Geneva
  17. StdStamps.StdViewDesc
  18. Geneva
  19. Geneva
  20. MODULE MacFileMgr;
  21. (** cp 
  22.     IMPORT SYSTEM, MacTypes;
  23.     CONST
  24.         (** access modes for opening files **)
  25.         fsCurPerm* = 0;    (** whatever permission is allowed **)
  26.         fsRdPerm* = 1;    (** read permission **)
  27.         fsWrPerm* = 2;    (** write permission **)
  28.         fsRdWrPerm* = 3;    (** exclusive read/write permission **)
  29.         fsRdWrShPerm* = 4;    (** shared read/write permission **)
  30.         (** file mark positioning modes **)
  31.         fsAtMark* = 0;
  32.         fsFromStart* = 1;
  33.         fsFromLEOF* = 2;
  34.         fsFromMark* = 3;
  35.         rdVerify* = 64;
  36.         HANDLE = 2;
  37.         UNTAGGED = 1;
  38.         CODE = 1;
  39.         NOSTKCHK = 4;
  40.         D0 = 0; A0 = 8; EQ = 7;
  41.     TYPE
  42.         (** File System Specification Record **)
  43.         FSSpec* = RECORD (MacTypes.Data)
  44.             vRefNum*: INTEGER;    (** volume reference number **)
  45.             parID*: LONGINT;    (** directory ID of parent directory **)
  46.             name*: MacTypes.Str63    (** filename or directory name **)
  47.         END;
  48.         FSSpecPtr* = POINTER TO FSSpec;
  49.         FSSpecHandle* = POINTER [HANDLE] TO FSSpec;
  50.         (** Standard File Reply Record **)
  51.         StandardFileReply* = RECORD (MacTypes.Data)
  52.             sfGood*: BOOLEAN;    (** TRUE if user did not cancel **)
  53.             sfReplacing*: BOOLEAN;    (** TRUE if replacing file with same name **)
  54.             sfType*: MacTypes.OSType;    (** file type **)
  55.             sfFile*: FSSpec;    (** selected item **)
  56.             sfScript*: INTEGER;    (** script of selected item's name **)
  57.             sfFlags*: MacTypes.Set;    (** Finder flags of selected item **)
  58.             sfIsFolder*: BOOLEAN;    (** selected item is a folder **)
  59.             sfIsVolume*: BOOLEAN;    (** selected item is a volume **)
  60.             sfReserved1*: LONGINT;
  61.             sfReserved2*: INTEGER
  62.         END;
  63.         SFTypeList* = ARRAY [UNTAGGED] 4 OF MacTypes.OSType;
  64.         FInfo* = RECORD (MacTypes.Data)
  65.             fdType*,
  66.             fdCreator*: MacTypes.OSType;
  67.             fdFlags*: MacTypes.Set;
  68.             fdLocation*: MacTypes.Point;
  69.             fdFldr*: INTEGER
  70.         END;
  71.         FXInfo = RECORD (MacTypes.Data)
  72.             fdIconID: INTEGER;
  73.             fdUnused: ARRAY [UNTAGGED] 4 OF INTEGER;
  74.             fdComment: INTEGER;
  75.             fdPutAway: LONGINT
  76.         END;
  77.         DInfo = RECORD (MacTypes.Data)
  78.             frL, frT, frR, frB: INTEGER;
  79.             frFlags: MacTypes.Set;
  80.             frLocation: MacTypes.Point;
  81.             frView: INTEGER
  82.         END;
  83.         DXInfo = RECORD (MacTypes.Data)
  84.             frScroll: MacTypes.Point;
  85.             frOpenChain: LONGINT;
  86.             frUnused: INTEGER;
  87.             frComment: INTEGER;
  88.             frPutAway: LONGINT
  89.         END;
  90.         HParamBlk = RECORD (MacTypes.Data)
  91.             qLink: LONGINT;
  92.             qType, ioTrap: INTEGER;
  93.             ioCmdAddr, ioCompletion: LONGINT;
  94.             ioResult: INTEGER;
  95.             ioNamePtr: LONGINT;
  96.             ioVRefNum: INTEGER
  97.         END;
  98.         HIOParamBlk = RECORD (HParamBlk)
  99.             ioRefNum: INTEGER;
  100.             ioVersNum: SHORTINT;
  101.             ioPermssn: SHORTINT;
  102.             ioMisc: LONGINT;
  103.             ioBuffer: MacTypes.Ptr;
  104.             ioReqCount, ioActCount: LONGINT;
  105.             ioPosMode: INTEGER;
  106.             ioPosOffset: LONGINT
  107.         END;
  108.         HFileParamBlk = RECORD (HParamBlk)
  109.             ioFRefNum: INTEGER;
  110.             ioFVersNum: SHORTINT;
  111.             ioFDirIndex: INTEGER;
  112.             ioFlAttrib, ioFlVersNum: SHORTINT;
  113.             ioFlFndrInfo: FInfo;
  114.             ioDirID: LONGINT;
  115.             ioFlStBlk: INTEGER;
  116.             ioFlLgLen, ioFlPyLen: LONGINT;
  117.             ioFlRStBlk: INTEGER;
  118.             ioFlRLgLen, ioFlRPyLen, ioFlCrDat, ioFlMdDat: LONGINT
  119.         END;
  120.         HVolParamBlk = RECORD (HParamBlk)
  121.             filler2: LONGINT;
  122.             ioVolIndex: INTEGER;
  123.             ioVCrDate: LONGINT;
  124.             ioVLsMod: LONGINT;
  125.             ioVAtrb: INTEGER;
  126.             ioVNmFls: INTEGER;
  127.             ioVBitMap: INTEGER;
  128.             ioAllocPtr: INTEGER;
  129.             ioVNmAlBlks: INTEGER;
  130.             ioVAlBlkSiz: LONGINT;
  131.             ioVClpSiz: LONGINT;
  132.             ioAlBlSt: INTEGER;
  133.             ioVNxtCNID: LONGINT;
  134.             ioVFrBlk: INTEGER;
  135.             ioVSigWord: INTEGER;
  136.             ioVDrvInfo: INTEGER;
  137.             ioVDRefNum: INTEGER;
  138.             ioVFSID: INTEGER;
  139.             ioVBkUp: LONGINT;
  140.             ioVSeqNum: INTEGER;
  141.             ioVWrCnt: LONGINT;
  142.             ioVFilCnt: LONGINT;
  143.             ioVDirCnt: LONGINT;
  144.             ioVFndrInfo: ARRAY [UNTAGGED] 8 OF LONGINT
  145.         END;
  146.         FCBPBRec = RECORD (HParamBlk)
  147.             ioRefNum: INTEGER;
  148.             filler: INTEGER;
  149.             ioFCBIndx: INTEGER;
  150.             filler1: INTEGER;
  151.             ioFCBFlNm: LONGINT;
  152.             ioFCBFlags: INTEGER;
  153.             ioFCBStBlk: INTEGER;
  154.             ioFCBEOF: LONGINT;
  155.             ioFCBPLen: LONGINT;
  156.             ioFCBCrPs: LONGINT;
  157.             ioFCBVRefNum: INTEGER;
  158.             ioFCBClpSiz: LONGINT;
  159.             ioFCBParID: LONGINT
  160.         END;
  161.         CInfoPBRec = RECORD (HParamBlk)
  162.             ioFRefNum: INTEGER;
  163.             ioFVersNum: SHORTINT;
  164.             filler1: SHORTINT;
  165.             ioFDirIndex: INTEGER;
  166.             ioFlAttrib: SHORTINT;
  167.             ioACUser: SHORTINT
  168.         END;
  169.         CFileInfoPBRec = RECORD (CInfoPBRec)
  170.             ioFlFndrInfo: FInfo;
  171.             ioDirID: LONGINT;
  172.             ioFlStBlk: INTEGER;
  173.             ioFlLgLen: LONGINT;
  174.             ioFlPyLen: LONGINT;
  175.             ioFlRStBlk: INTEGER;
  176.             ioFlRLgLen: LONGINT;
  177.             ioFlRPyLen: LONGINT;
  178.             ioFlCrDat: LONGINT;
  179.             ioFlMdDat: LONGINT;
  180.             ioFlBkDat: LONGINT;
  181.             ioFlXFndrInfo: FXInfo;
  182.             ioFlParID: LONGINT;
  183.             ioFlClpSiz: LONGINT
  184.         END;
  185.         CDirInfoPBRec = RECORD (CInfoPBRec)
  186.             ioDrUsrWds: DInfo;
  187.             ioDrDirID: LONGINT;
  188.             ioDrNmFls: INTEGER;
  189.             filler3: ARRAY [UNTAGGED] 9 OF INTEGER;
  190.             ioDrCrDat: LONGINT;
  191.             ioDrMdDat: LONGINT;
  192.             ioDrBkDat: LONGINT;
  193.             ioDrFndrInfo: DXInfo;
  194.             ioDrParID: LONGINT
  195.         END;
  196.     PROCEDURE [CODE] PBGetFPos    0A0H, 018H;
  197.     PROCEDURE [CODE] PBSetFPos    0A0H, 044H;
  198.     PROCEDURE [CODE] PBRead    0A0H, 002H;
  199.     PROCEDURE [CODE] PBWrite    0A0H, 003H;
  200.     PROCEDURE [CODE] PBClose    0A0H, 001H;
  201.     PROCEDURE [CODE] PBGetEOF    0A0H, 011H;
  202.     PROCEDURE [CODE] PBSetEOF    0A0H, 012H;
  203.     PROCEDURE [CODE] PBFlushVol    0A0H, 013H;
  204.     PROCEDURE [CODE] PBHGetVInfo    0A2H, 007H;
  205.     PROCEDURE [CODE] HFSDispatch    0A2H, 060H;
  206.     PROCEDURE [CODE] standardGetFile (fileFilter: MacTypes.ProcPtr;
  207.                                         numTypes: INTEGER; typeList: SFTypeList;
  208.                                         VAR reply: StandardFileReply; n: INTEGER) 0A9H, 0EAH;
  209.     PROCEDURE [CODE] customGetFile (fileFilter: MacTypes.ProcPtr; numTypes: INTEGER;
  210.                                     typeList: SFTypeList; VAR reply: StandardFileReply;
  211.                                     dlgID: INTEGER; where: MacTypes.Point; dlgHook: MacTypes.ProcPtr;
  212.                                     filterProc: MacTypes.ProcPtr; activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr;
  213.                                     yourDataPtr: LONGINT; n: INTEGER) 0A9H, 0EAH;
  214.     PROCEDURE [CODE] standardPutFile (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
  215.                                 VAR reply: StandardFileReply; n: INTEGER) 0A9H, 0EAH;
  216.     PROCEDURE [CODE] customPutFile (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
  217.                                     VAR reply: StandardFileReply; dlgID: INTEGER;
  218.                                     where: MacTypes.Point; dlgHook: MacTypes.ProcPtr; filterProc: MacTypes.ProcPtr;
  219.                                     activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr; yourDataPtr: LONGINT; n: INTEGER) 0A9H, 0EAH;
  220.     PROCEDURE [CODE] fSpOpen (spec: FSSpec; permission: SHORTINT;
  221.                                     VAR refNum: INTEGER): INTEGER 0AAH, 052H;
  222.     PROCEDURE [CODE] fSpCreate (spec: FSSpec; creator: MacTypes.OSType; fileType: MacTypes.OSType;
  223.                                     scriptTag: INTEGER): INTEGER 0AAH, 052H;
  224.     PROCEDURE [CODE] fSpDirCreate (spec: FSSpec; scriptTag: INTEGER;
  225.                                         VAR createdDirID: LONGINT): INTEGER 0AAH, 052H;
  226.     PROCEDURE [CODE] fSpDelete (spec: FSSpec): INTEGER 0AAH, 052H;
  227.     PROCEDURE [CODE] fSpGetFInfo (spec: FSSpec; VAR fndrInfo: FInfo): INTEGER 0AAH, 052H;
  228.     PROCEDURE [CODE] fSpSetFInfo (spec: FSSpec; fndrInfo: FInfo): INTEGER 0AAH, 052H;
  229.     PROCEDURE [CODE] fSpSetFLock (spec: FSSpec): INTEGER 0AAH, 052H;
  230.     PROCEDURE [CODE] fSpRstFLock (spec: FSSpec): INTEGER 0AAH, 052H;
  231.     PROCEDURE [CODE] fSpRename (spec: FSSpec; newName: MacTypes.Str255): INTEGER 0AAH, 052H;
  232.     PROCEDURE [CODE] fSpMove (source, dest: FSSpec): INTEGER 0AAH, 052H;
  233.     PROCEDURE [CODE] fSpMakeFSSpec (vRefNum: INTEGER; dirID: LONGINT;
  234.                                         fileName: MacTypes.Str255; VAR spec: FSSpec): INTEGER 0AAH, 052H;
  235.     PROCEDURE [NOSTKCHK] PBGetCatInfoSync (VAR pb: CInfoPBRec): INTEGER;
  236.     BEGIN
  237.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  238.         SYSTEM.PUTREG(D0, LONG(LONG(9))); HFSDispatch;
  239.         RETURN pb.ioResult
  240.     END PBGetCatInfoSync;
  241.     (** File Specification Routines **)
  242.     (** Opening Files **)
  243.     PROCEDURE [NOSTKCHK] StandardGetFile* (fileFilter: MacTypes.ProcPtr;
  244.                                         numTypes: INTEGER; typeList: SFTypeList;
  245.                                         VAR reply: StandardFileReply);
  246.     BEGIN
  247.         standardGetFile(fileFilter, numTypes, typeList, reply, 6)
  248.     END StandardGetFile;
  249.     PROCEDURE [NOSTKCHK] CustomGetFile* (fileFilter: MacTypes.ProcPtr; numTypes: INTEGER;
  250.                                     typeList: SFTypeList; VAR reply: StandardFileReply;
  251.                                     dlgID: INTEGER; where: MacTypes.Point; dlgHook: MacTypes.ProcPtr;
  252.                                     filterProc: MacTypes.ProcPtr; activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr;
  253.                                     yourDataPtr: LONGINT);
  254.     BEGIN
  255.         customGetFile(fileFilter, numTypes, typeList, reply, dlgID, where, dlgHook,
  256.                         filterProc, activeList, activateProc, yourDataPtr, 8)
  257.     END CustomGetFile;
  258.     (** Saving Files **)
  259.     PROCEDURE [NOSTKCHK] StandardPutFile* (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
  260.                                         VAR reply: StandardFileReply);
  261.     BEGIN
  262.         standardPutFile(prompt, defaultName, reply, 5)
  263.     END StandardPutFile;
  264.     PROCEDURE [NOSTKCHK] CustomPutFile* (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
  265.                                     VAR reply: StandardFileReply; dlgID: INTEGER;
  266.                                     where: MacTypes.Point; dlgHook: MacTypes.ProcPtr; filterProc: MacTypes.ProcPtr;
  267.                                     activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr; yourDataPtr: LONGINT);
  268.     BEGIN
  269.         customPutFile(prompt, defaultName, reply, dlgID, where, dlgHook, filterProc,
  270.                         activeList, activateProc, yourDataPtr, 7)
  271.     END CustomPutFile;
  272.     (** File Access Routines **)
  273.     (** Reading, Writing, and Closing Files **)
  274.     PROCEDURE [NOSTKCHK] FSRead* (refNum: INTEGER; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
  275.         VAR pb: HIOParamBlk;
  276.     BEGIN
  277.         pb.ioNamePtr := 0;
  278.         pb.ioRefNum := refNum;
  279.         pb.ioBuffer := buffPtr;
  280.         pb.ioReqCount := count;
  281.         pb.ioPosMode := fsAtMark;
  282.         pb.ioPosOffset := 0;
  283.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  284.         PBRead;
  285.         count := pb.ioActCount;
  286.         RETURN pb.ioResult
  287.     END FSRead;
  288.     PROCEDURE [NOSTKCHK] FSWrite* (refNum: INTEGER; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
  289.         VAR pb: HIOParamBlk;
  290.     BEGIN
  291.         pb.ioNamePtr := 0;
  292.         pb.ioRefNum := refNum;
  293.         pb.ioBuffer := buffPtr;
  294.         pb.ioReqCount := count;
  295.         pb.ioPosMode := fsAtMark;
  296.         pb.ioPosOffset := 0;
  297.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  298.         PBWrite;
  299.         count := pb.ioActCount;
  300.         RETURN pb.ioResult
  301.     END FSWrite;
  302.     PROCEDURE [NOSTKCHK] FSReadAt* (refNum: INTEGER; org: LONGINT; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
  303.         VAR pb: HIOParamBlk;
  304.     BEGIN
  305.         pb.ioNamePtr := 0;
  306.         pb.ioRefNum := refNum;
  307.         pb.ioBuffer := buffPtr;
  308.         pb.ioReqCount := count;
  309.         pb.ioPosMode := fsFromStart;
  310.         pb.ioPosOffset := org;
  311.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  312.         PBRead;
  313.         count := pb.ioActCount;
  314.         RETURN pb.ioResult
  315.     END FSReadAt;
  316.     PROCEDURE [NOSTKCHK] FSWriteAt* (refNum: INTEGER; org: LONGINT; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
  317.         VAR pb: HIOParamBlk;
  318.     BEGIN
  319.         pb.ioNamePtr := 0;
  320.         pb.ioRefNum := refNum;
  321.         pb.ioBuffer := buffPtr;
  322.         pb.ioReqCount := count;
  323.         pb.ioPosMode := fsFromStart;
  324.         pb.ioPosOffset := org;
  325.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  326.         PBWrite;
  327.         count := pb.ioActCount;
  328.         RETURN pb.ioResult
  329.     END FSWriteAt;
  330.     PROCEDURE [NOSTKCHK] FSClose* (refNum: INTEGER): INTEGER;
  331.         VAR pb: HIOParamBlk; name: MacTypes.Str255;
  332.     BEGIN
  333.         pb.ioNamePtr := SYSTEM.ADR(name);
  334.         pb.ioRefNum := refNum;
  335.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  336.         PBClose;
  337.         RETURN pb.ioResult
  338.     END FSClose;
  339.     (** Manipulating the File Mark **)
  340.     PROCEDURE [NOSTKCHK] GetFPos* (refNum: INTEGER; VAR filePos: LONGINT): INTEGER;
  341.         VAR pb: HIOParamBlk; name: MacTypes.Str255;
  342.     BEGIN
  343.         pb.ioNamePtr := SYSTEM.ADR(name);
  344.         pb.ioRefNum := refNum;
  345.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  346.         PBGetFPos;
  347.         filePos := pb.ioPosOffset;
  348.         RETURN pb.ioResult
  349.     END GetFPos;
  350.     PROCEDURE [NOSTKCHK] SetFPos* (refNum: INTEGER; posMode: INTEGER; posOff: LONGINT): INTEGER;
  351.         VAR pb: HIOParamBlk; name: MacTypes.Str255;
  352.     BEGIN
  353.         pb.ioNamePtr := SYSTEM.ADR(name);
  354.         pb.ioRefNum := refNum;
  355.         pb.ioPosMode := posMode;
  356.         pb.ioPosOffset := posOff;
  357.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  358.         PBSetFPos;
  359.         RETURN pb.ioResult
  360.     END SetFPos;
  361.     (** Manipulating the End-of-File **)
  362.     PROCEDURE [NOSTKCHK] GetEOF* (refNum: INTEGER; VAR logEOF: LONGINT): INTEGER;
  363.         VAR pb: HIOParamBlk;
  364.     BEGIN
  365.         pb.ioNamePtr := 0;
  366.         pb.ioRefNum := refNum;
  367.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  368.         PBGetEOF;
  369.         logEOF := pb.ioMisc;
  370.         RETURN pb.ioResult
  371.     END GetEOF;
  372.     PROCEDURE [NOSTKCHK] SetEOF* (refNum: INTEGER; logEOF: LONGINT): INTEGER;
  373.         VAR pb: HIOParamBlk;
  374.     BEGIN
  375.         pb.ioNamePtr := 0;
  376.         pb.ioRefNum := refNum;
  377.         pb.ioMisc := logEOF;
  378.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  379.         PBSetEOF;
  380.         RETURN pb.ioResult
  381.     END SetEOF;
  382.     (** Catalog Traversal **)
  383.     PROCEDURE [NOSTKCHK] FSpGetCatInfo* (dir: FSSpec; index: INTEGER; VAR spec: FSSpec;
  384.                                         VAR type: MacTypes.OSType; VAR id: LONGINT;
  385.                                         VAR n, cDate, mDate: LONGINT): INTEGER;    (** additional **)
  386.         VAR res: INTEGER; pb: CFileInfoPBRec;
  387.     BEGIN
  388.         pb.ioNamePtr := SYSTEM.ADR(dir.name);
  389.         pb.ioVRefNum := dir.vRefNum;
  390.         pb.ioDirID := dir.parID;
  391.         pb.ioFDirIndex := index;
  392.         res := PBGetCatInfoSync(pb);
  393.         IF res = 0 THEN
  394.             (* name may have changed, thus spec := dir.
  395.                 but it must be copied component-wise otherwise implied type guard.
  396.                 this is a compiler bug!?  *)
  397.             spec.name := dir.name;
  398.             spec.vRefNum := dir.vRefNum;
  399.             spec.parID := dir.parID;
  400.             IF ODD(pb.ioFlAttrib DIV 16) THEN type := 0 ELSE type := pb.ioFlFndrInfo.fdType END;
  401.             id := pb.ioDirID;
  402.             IF type = 0 THEN    (* directory *)
  403.                 n := pb.ioFlStBlk;    (* = ioDrNmFls *)
  404.             ELSE    (* file *)
  405.                 n := pb.ioFlLgLen
  406.             END;
  407.             cDate := pb.ioFlCrDat;    (* = ioDrCrDat *)
  408.             mDate := pb.ioFlMdDat    (* = ioDrMdDat *)
  409.         END;
  410.         RETURN res
  411.     END FSpGetCatInfo;
  412.     (** File and Directory Manipulation Routines **)
  413.     (** Opening, Creating, Deleting, Renaming, and Moving Files **)
  414.     PROCEDURE [NOSTKCHK] FSpOpenDF* (spec: FSSpec; permission: SHORTINT; VAR refNum: INTEGER): INTEGER;
  415.     BEGIN
  416.         SYSTEM.PUTREG(D0, LONG(LONG(2)));
  417.         RETURN fSpOpen(spec, permission, refNum)
  418.     END FSpOpenDF;
  419.     PROCEDURE [NOSTKCHK] FSpOpenRF* (spec: FSSpec; permission: SHORTINT; VAR refNum: INTEGER): INTEGER;
  420.     BEGIN
  421.         SYSTEM.PUTREG(D0, LONG(LONG(3)));
  422.         RETURN fSpOpen(spec, permission, refNum)
  423.     END FSpOpenRF;
  424.     PROCEDURE [NOSTKCHK] FSpCreate* (spec: FSSpec; creator: MacTypes.OSType; fileType: MacTypes.OSType;
  425.                                     scriptTag: INTEGER): INTEGER;
  426.     BEGIN
  427.         SYSTEM.PUTREG(D0, LONG(LONG(4)));
  428.         RETURN fSpCreate(spec, creator, fileType, scriptTag)
  429.     END FSpCreate;
  430.     PROCEDURE [NOSTKCHK] FSpDirCreate* (spec: FSSpec; scriptTag: INTEGER;
  431.                                         VAR createdDirID: LONGINT): INTEGER;
  432.     BEGIN
  433.         SYSTEM.PUTREG(D0, LONG(LONG(5)));
  434.         RETURN fSpDirCreate(spec, scriptTag, createdDirID)
  435.     END FSpDirCreate;
  436.     PROCEDURE [NOSTKCHK] FSpDelete* (spec: FSSpec): INTEGER;
  437.     BEGIN
  438.         SYSTEM.PUTREG(D0, LONG(LONG(6)));
  439.         RETURN fSpDelete(spec)
  440.     END FSpDelete;
  441.     PROCEDURE [NOSTKCHK] FSpGetFInfo* (spec: FSSpec; VAR fndrInfo: FInfo): INTEGER;
  442.     BEGIN
  443.         SYSTEM.PUTREG(D0, LONG(LONG(7)));
  444.         RETURN fSpGetFInfo(spec, fndrInfo)
  445.     END FSpGetFInfo;
  446.     PROCEDURE [NOSTKCHK] FSpSetFInfo* (spec: FSSpec; fndrInfo: FInfo): INTEGER;
  447.     BEGIN
  448.         SYSTEM.PUTREG(D0, LONG(LONG(8)));
  449.         RETURN fSpSetFInfo(spec, fndrInfo)
  450.     END FSpSetFInfo;
  451.     PROCEDURE [NOSTKCHK] FSpSetFLock* (spec: FSSpec): INTEGER;
  452.     BEGIN
  453.         SYSTEM.PUTREG(D0, LONG(LONG(9)));
  454.         RETURN fSpSetFLock(spec)
  455.     END FSpSetFLock;
  456.     PROCEDURE [NOSTKCHK] FSpRstFLock* (spec: FSSpec): INTEGER;
  457.     BEGIN
  458.         SYSTEM.PUTREG(D0, LONG(LONG(0AH)));
  459.         RETURN fSpRstFLock(spec)
  460.     END FSpRstFLock;
  461.     PROCEDURE [NOSTKCHK] FSpRename* (spec: FSSpec; newName: MacTypes.Str255): INTEGER;
  462.     BEGIN
  463.         SYSTEM.PUTREG(D0, LONG(LONG(0BH)));
  464.         RETURN fSpRename(spec, newName)
  465.     END FSpRename;
  466.     PROCEDURE [NOSTKCHK] FSpCatMove* (source, dest: FSSpec): INTEGER;
  467.     BEGIN
  468.         SYSTEM.PUTREG(D0, LONG(LONG(0CH)));
  469.         RETURN fSpMove(source, dest)
  470.     END FSpCatMove;
  471.     (** Exchanging the Data in Two Files **)
  472.     PROCEDURE [NOSTKCHK] FSpExchangeFiles* (source, dest: FSSpec): INTEGER;
  473.     BEGIN
  474.         SYSTEM.PUTREG(D0, LONG(LONG(0FH)));
  475.         RETURN fSpMove(source, dest)
  476.     END FSpExchangeFiles;
  477.     (** Creating File System Specifications **)
  478.     PROCEDURE [NOSTKCHK] FSpMakeFSSpec* (vRefNum: INTEGER; dirID: LONGINT;
  479.                                         fileName: MacTypes.Str255; VAR spec: FSSpec): INTEGER;
  480.     BEGIN
  481.         SYSTEM.PUTREG(D0, LONG(LONG(1)));
  482.         RETURN fSpMakeFSSpec (vRefNum, dirID, fileName, spec)
  483.     END FSpMakeFSSpec;
  484.     (** Volume Access Routines **)
  485.     (** Updating Volumes **)
  486.     PROCEDURE [NOSTKCHK] FlushVol* (volName: MacTypes.StringPtr; vRefNum: INTEGER): INTEGER;
  487.         VAR pb: HIOParamBlk; name: MacTypes.Str255;
  488.     BEGIN
  489.         pb.ioNamePtr := SYSTEM.ADR(name);
  490.         pb.ioVRefNum := vRefNum;
  491.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  492.         PBFlushVol;
  493.         RETURN pb.ioResult
  494.     END FlushVol;
  495.     (** Obtaining Volume and File Information **)
  496.     PROCEDURE [NOSTKCHK] GetVolInfo* (vRefNum: INTEGER; VAR alloc, free: LONGINT; VAR locked: BOOLEAN): INTEGER;
  497.         VAR pb: HVolParamBlk; l: LONGINT;
  498.     BEGIN
  499.         pb.ioNamePtr := 0;
  500.         pb.ioVRefNum := vRefNum;
  501.         pb.ioVolIndex := 0;
  502.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  503.         PBHGetVInfo;
  504.         l := 0; SYSTEM.MOVE(SYSTEM.ADR(pb.ioVFrBlk), SYSTEM.ADR(l) + 2, 2);
  505.         free := pb.ioVAlBlkSiz * l;
  506.         l := 0; SYSTEM.MOVE(SYSTEM.ADR(pb.ioVNmAlBlks), SYSTEM.ADR(l) + 2, 2);
  507.         alloc := pb.ioVAlBlkSiz * l - free;
  508.         l := pb.ioVAtrb;
  509.         locked := SYSTEM.BIT(l, 7) OR SYSTEM.BIT(l, 15);
  510.         RETURN pb.ioResult
  511.     END GetVolInfo;
  512.     PROCEDURE [NOSTKCHK] FsRefToFSSpec* (refNum: INTEGER; VAR spec: FSSpec);
  513.         VAR pb: FCBPBRec;
  514.     BEGIN
  515.         spec.name := "";
  516.         pb.ioNamePtr := SYSTEM.ADR(spec.name);
  517.         pb.ioFCBIndx := 0;
  518.         pb.ioRefNum := refNum;
  519.         SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
  520.         SYSTEM.PUTREG(D0, LONG(LONG(8))); HFSDispatch;
  521.         ASSERT(pb.ioResult = 0, 100);
  522.         spec.vRefNum := pb.ioFCBVRefNum;
  523.         spec.parID := pb.ioFCBParID;
  524.         ASSERT(pb.ioResult = 0, 101)
  525.     END FsRefToFSSpec;
  526.     PROCEDURE [NOSTKCHK] FsSpecToPath* (spec: FSSpec; VAR path: MacTypes.Str255; file: BOOLEAN);
  527.         VAR i, j, lenP, lenD, res: INTEGER; pb: CDirInfoPBRec; dir: MacTypes.Str255;
  528.     BEGIN
  529.         IF file THEN
  530.             lenP := ORD(spec.name[0]);
  531.             i := 0; WHILE i <= lenP DO path[i] := spec.name[i]; INC(i) END
  532.         ELSE
  533.             path := ""; lenP := 0
  534.         END;
  535.         pb.ioNamePtr := SYSTEM.ADR(dir);
  536.         pb.ioVRefNum := spec.vRefNum;
  537.         pb.ioDrParID := spec.parID;
  538.         pb.ioFDirIndex := -1;
  539.         REPEAT
  540.             pb.ioDrDirID := pb.ioDrParID;
  541.             res := PBGetCatInfoSync(pb); ASSERT(res = 0, 100);
  542.             lenD := ORD(dir[0]) + 1; 
  543.             i := lenP; j := lenP + lenD; ASSERT(j < 256, 101);
  544.             WHILE i # 0 DO path[j] := path[i]; DEC(i); DEC(j) END;
  545.             path[lenD] := ":";
  546.             i := 1; WHILE i < lenD DO path[i] := dir[i]; INC(i) END;
  547.             INC(lenP, lenD);
  548.             path[0] := CHR(lenP)
  549.         UNTIL pb.ioDrDirID = 2    (* root directory *)
  550.     END FsSpecToPath;
  551. END MacFileMgr.
  552. TextControllers.StdCtrlDesc
  553. TextControllers.ControllerDesc
  554. Containers.ControllerDesc
  555. Controllers.ControllerDesc
  556. TextRulers.StdRulerDesc
  557. TextRulers.RulerDesc
  558. TextRulers.StdStyleDesc
  559. TextRulers.StyleDesc
  560. TextRulers.AttributesDesc
  561. Geneva
  562. Documents.ControllerDesc
  563.